package net.sf.rose.exception;

/**
 * 功能:所有异常的封装父类
 * 这里对异常重新作了定义，不保存原来的异常信息，所以抛出此异常前请先记录原来的异常。
 * @author fengjian
 * @since 2013/05/30
 */
public class SystemException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	/** 异常类型码 */
	private ErrorCode errorCode;

	/**
	 * 异常创造函数
	 * @param errorCode - 异常类型码
	 */
	public SystemException(ErrorCode errorCode) {
		super();
		this.errorCode = errorCode;
	}

	/**
	 * 异常创造函数
	 * @param message   - 文本消息
	 * @param errorCode - 异常类型码
	 */
	public SystemException(String message, ErrorCode errorCode) {
		super(message);
		this.errorCode = errorCode;
	}

	/**
	 * 返回异常定义码
	 */
	public ErrorCode getErrorCode() {
		return errorCode;
	}

	/**
	 * 返回异常定义码的大类型
	 */
	public ErrorCode getErrorType() {
		int num = errorCode.getNumber();
		if (num < SystemErrorCode.DAO_ERROR.getNumber()) {
			return SystemErrorCode.DAO_ERROR;
		} else if (num < SystemErrorCode.SERVICE_ERROR.getNumber()) {
			return SystemErrorCode.SERVICE_ERROR;
		} else if (num < SystemErrorCode.CONTROLLER_ERROR.getNumber()) {
			return SystemErrorCode.CONTROLLER_ERROR;
		} else if (num < SystemErrorCode.APPLICATION_ERROR.getNumber()) {
			return SystemErrorCode.APPLICATION_ERROR;
		} else if (num < SystemErrorCode.USER_ERROR.getNumber()) {
			return SystemErrorCode.USER_ERROR;
		}
		return SystemErrorCode.USER_ERROR;
	}

	/**
	 * 返回异常异常描述
	 */
	public String getErrorString() {
		return SystemErrorCode.getString(errorCode.getNumber());
	}
}
